#include <iostream>
#include <string>
#include <fstream>
#include <unordered_map>
#include "Log.hpp"
using namespace LogModule;

const std::string DefaultPath = "./Dict.txt";
const std::string step = ": ";

class Dict
{
public:
    Dict(const std::string &path = DefaultPath)
        : _path(path)
    {
    }

    void LoadDict()
    {
        // 打开对应文件
        std::ifstream inFile;
        inFile.open(_path, std::ios::in);
        // 如果没有打开成功
        if (!inFile) // 等价于：!inFile.is_open()
        {
            LOG(LogLevel::FATAL) << "文件打开失败！";
            return;
        }

        // 加载字典数据
        string line;
        // 读取文件中一整行内容(cin则只读取到空格)
        while (getline(inFile, line))
        {
            // 找到分隔符的位置
            auto pos = line.find(step);
            // 没有找到
            if (pos == std::string::npos)
            {
                LOG(LogLevel::DEBUG) << "单词解析失败!";
            }

            // 获取中英文
            std::string English = line.substr(0, pos);
            std::string Chinese = line.substr(pos + step.size());
            if (English.empty() || Chinese.empty())
            {
                LOG(LogLevel::DEBUG) << "单词信息残缺!";
            }

            // 插入map中
            _umap.insert(make_pair(English, Chinese));
            LOG(LogLevel::INFO) << "单词载入成功!";
        }

        // 关闭对应文件
        inFile.close();
    }

    string Translate(const std::string &word)
    {
        auto pos = _umap.find(word);
        if (pos == _umap.end())
        {
            return word + " -> None";
        }
        else
        {
            std::string ss = pos->second;
            return word + " -> " + ss;
        }
    }

private:
    std::string _path;
    unordered_map<std::string, std::string> _umap;
};